Lambdaで取得したTwitterの情報をElasticsearchとKibanaで可視化したらすごいことになった話・前編

Pocket

1.はじめに

こんにちは!毎回記事が長いと言われる山内です。今回も長くなってしまったので、前編と後編に分けてお届けいたします!お付き合いください。

タイトルをご覧いただければお分かりになるかと思いますが、最近、Twitterの情報を見える化する機会があったので、今回はそのお話を書かせていただきます。

SNSが浸透してきたこの世の中、「エゴサーチ」ってしたことある人が多いんじゃないでしょうか。エゴサーチをしたことがない人も、SNSを使っていると、トレンドワードみたいなものが表示された経験がある人がほとんどかと思います。筆者も、最新のニュースなどはTwitterのトレンドで知ることが結構あります。

そこで、たくさんあるTwitterの情報を可視化したら楽しそうではないか!ということで、やってみました!(*1)もし、「作る過程は良いから、作ったものが見たい!」という方がいたら、後編の「10.楽しむ!」までジャンプしてください。

(余談ですが、TwitterはSNSじゃないそうです。Twitter社自身も明確に否定しているみたいなので、興味がある方は「Twitter SNS ではない」とかでググってみてくださいね。)

*1 AWSマネジメントコンソールの画面は2019/05/21時点のものです。

2.今回作ったもの

今回作ったものは、Twitterから特定のキーワードで検索したものを、ElasticsearchとKibanaで可視化する、といったものです。この際、AI関連のサービスであるAmazon ComprehendやAmazon Translateを活用し、ツイートの感情分析(ポジネガ分析)も行えるようにしています。本当はComprehendだけでやりたかったのですが、Comprehendが日本語に対応しておらず、Translateで英語に翻訳する処理を入れました。(このときは、まさかあんなにすごいことになるとは思いもしなかった…。)

画面イメージはこんな感じです。
 

 

それから、構成図はこんな感じです。

3.Twitter APIを利用する準備

まず、Twitter APIを利用するための準備として、APIへのアクセス情報を取得する必要があります。下記の手順で、アクセス情報を取得してください。

  1. TwitterのDeveloper Accountを取得する。(取得の仕方は既にネット上にたくさん記事があるので、そちらをご参照ください。)

  2. 下記4つの項目をメモする。

    • API key
    • API secret key
    • Access token
    • Access token secret

4.Elasticsearchを作成する

次に、今回のテーマである「可視化」を行うためのデータを蓄積するElasticsearchを構築していきます。

  1. AWSマネジメントコンソールで「Elasticsearch Service」を選択する。
  2. 「新しいドメインの作成」をクリックする。
  3. 下記情報を入力し、「次へ」をクリックする。
    • デプロイタイプ : 任意(今回は「開発およびテスト」)
    • バージョン   : 任意(今回は「6.5」)

  4. 下記情報を入力し、「次へ」をクリックする。
    • ドメイン名     : 任意(今回は「sns-analysis-demo」)
    • インスタンスタイプ : 任意(今回は「t2.medium.elasticsearch」)

  5. 下記情報を入力し、「次へ」をクリックする。
    • ネットワーク構成 : 任意(今回は「パブリックアクセス」)
    • アクセスポリシー : 任意(今回は「テンプレートを選択」→「ドメインへのオープンアクセスを許可」)

    今回の設定はかなりのセキュリティリスクを伴うため、本来は設定すべきではありません。今回はデモ用の簡易的な環境構築のため、上記設定を行っています。実際はアクセス制限など、しっかり設定してください。

  6. 設定した項目を再度確認し、「確認」をクリックする。
  7. ドメインのステータスが「アクティブ」になればOK。

5.Lambdaを作成する

  1. AWSマネジメントコンソールで「AWS Lambda」を選択する。
  2. 「関数の作成」をクリックする。
  3. 下記情報を入力し、「関数の作成」をクリックする。
    • 関数名   : 任意(今回は「sns-analysis-demo」)
    • ランタイム : Node.js 10.x

  4. 下記コードを転記し、右上の「保存」をクリックする。※requireしているモジュールを合わせてZIPファイルをアップロードする。

  5. 「基本設定」内の下記項目を設定し、「保存」をクリックする。
    • 説明     : 任意
    • タイムアウト : 15分

  6. 「環境変数」に下記情報を登録する。
    • ホスト
      • キー : ES_HOST
      • 値  : (Elasticsearchの「エンドポイント」の「https://」を除いたもの
    • Elasticsearchを作成したリージョン
      • キー : ES_REGION
      • 値  : (今回は「ap-northeast-1」)
    • Twitter APIへのアクセス情報(API Key)
      • キー : TW_CONSUMER_KEY
      • 値  : TwitterのDeveloper Account作成時にメモしたもの(API Key)
    • Twitter APIへのアクセス情報(API Secret Key)
      • キー : TW_CONSUMER_SECRET
      • 値  : TwitterのDeveloper Account作成時にメモしたもの(API Secret Key)
    • Twitter APIへのアクセス情報(Access Token)
      • キー : TW_ACCESS_TOKEN_KEY
      • 値  : TwitterのDeveloper Account作成時にメモしたもの(Access Token)
    • Twitter APIへのアクセス情報(Access Token Secret)
      • キー : TW_ACCESS_TOKEN_SECRET
      • 値  : TwitterのDeveloper Account作成時にメモしたもの(Access Token Secret)

  7. 「実行ロール」内の「~~~~ロールを表示」リンクをクリックする。
  8. 「ポリシーをアタッチします」をクリックする。
  9. 下記ポリシーをチェックし、「ポリシーのアタッチ」をクリックする。
      • ConprehendReadOnly
      • TransolateReadOnly

 

ここまででElasticsearchとLambdaの作成は終わりです。次回、後編ではKibanaを設定するところからご説明いたします。お楽しみに!

※TWITTER、TWEET(ツイート)、RETWEET(リツイート)、Twitter のロゴはTwitter, Inc.またはその関連会社の登録商標です。
※KibanaはElasticsearch BVの登録商標です。

お問い合わせ先

執筆者プロフィール

Yamauchi Kentaro
Yamauchi Kentarotdi デジタルイノベーション技術部
社内の開発プロジェクトの技術支援や、Javaにおける社内標準フレームワークの開発を担当しています。Spring BootとTDDに手を出しつつ、LINE Botとかもいじったりしています。最近はマイクロサービスを勉強しつつ、クラウドアプリケーションを開発できるエンジニアの育成にも力を入れてます!
Pocket

関連記事